import {
  Controller,
  Post,
  Body,
  Get,
  Req,
  ValidationPipe,
  Query,
} from '@nestjs/common';
import { LoginRegisterService } from './login-register.service';
import { LoginDto } from './dto/login.dto';
import { RegisterDto } from './dto/register.dto';
import { Auth } from 'src/core/auth/decorator/auth.decorator';
import express from 'express';

@Controller('login-register')
export class LoginRegisterController {
  constructor(private readonly loginRegisterService: LoginRegisterService) {}

  /**
   * 注册用户
   * ps:  局部添加ValidationPipe, 用于验证class-validator 提供的功能
   *      它会继承全局配置的验证管道，但可以有自己的特定设置
   * @param user 注册用户的信息
   * @returns 注册结果
   */
  @Post('register')
  async register(
    @Body(new ValidationPipe({}))
    user: RegisterDto,
  ) {
    return this.loginRegisterService.register(user);
  }

  @Post('login')
  async login(@Body() user: LoginDto) {
    return this.loginRegisterService.login(user);
  }

  @Auth()
  @Get('aaa')
  aaa(@Req() req: express.Request) {
    console.log((req as any).userinfo, '------header token userinfo------');
    return 'aaa';
  }

  @Auth({
    required: false,
  })
  @Get('bbb')
  bbb() {
    return 'bbb';
  }

  // 3. 角色验证 - 必须有admin角色
  @Auth({ roles: ['admin'] })
  @Get('admin')
  getAdmin(@Req() request: Request) {
    return {
      message: '只有管理员可以访问的接口',
      userinfo: request['userinfo'],
    };
  }

  // 4. 多个角色验证 - 有admin或user角色即可
  @Auth({ roles: ['admin', 'user'] })
  @Get('admin-or-manager')
  getAdminOrManager(@Req() request: Request) {
    return {
      message: '管理员或经理可以访问的接口',
      userinfo: request['userinfo'],
    };
  }

  /**
   * 获取验证码
   * @returns 验证码图片URL和验证码ID
   */
  @Get('captcha')
  async getCaptcha(@Query() expire: number) {
    return this.loginRegisterService.generateCaptcha(expire);
  }
}
